package com.nidu.demo.auth.api;

import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.nidu.demo.oauth2.dto.OAuth2AccessTokenCO;
import com.nidu.demo.oauth2.dto.OAuth2ApproveCO;
import com.nidu.demo.oauth2.dto.OAuth2AuthorizeCmd;
import com.nidu.demo.oauth2.dto.OAuth2GrantCmd;

public interface OAuth2Api {

    /**
     * 申请授权
     *
     * @param cmd 认证请求参数
     * @return 认证结果
     */
    SingleResponse<String> authorize(OAuth2AuthorizeCmd cmd);

    /**
     * 获取授权信息
     * @param clientCode
     * @param clientSecret
     * @return
     */
    SingleResponse<OAuth2ApproveCO> getAuthorize(String clientCode, String clientSecret);

    /**
     * 对授权码、密码、客户端、刷新令牌等进行认证，并返回访问令牌
     *
     * @param cmd 认证请求参数
     * @return 访问令牌
     */
    SingleResponse<OAuth2AccessTokenCO> grantToken(OAuth2GrantCmd cmd);

    /**
     * 校验访问令牌
     * @param clientId
     * @param clientSecret
     * @param accessToken
     * @return 访问令牌
     */
    SingleResponse<OAuth2AccessTokenCO> checkAccessToken(String clientId, String clientSecret, String accessToken);

    /**
     * 删除访问令牌
     * @param clientId
     * @param clientSecret
     * @param accessToken
     * @return
     */
    Response removeAccessToken(String clientId, String clientSecret, String accessToken);

}